# 28.let const var
@[TOC]
# 一,window 挂载
- var 声明的变量会挂载在 window 上。
- 而 let 和 const 声明的变量不会:
let a = 2;
var b = 3;
console.log(window.a); //undefined
console.log(window.b); //3
1
2
3
4
2
3
4
var 定义的变量,作用域是整个封闭函数,是全域的; let 定义的变量,作用域是在块级或者字块中;
# 二,变量提升;
- let 和 const 不存在变量提升机制
- let 声明的变量不会在顶部初始化,凡是在 let 声明之前使用该变量都会报错(引用错误 ReferenceError);
- 不论通过 var 声明的变量处于当前作用于的第几行,都会提升到作用域的最顶部
创建变量的六种方式中: var/function 声明的变量有提升机制,而 let、const、class 和 import 都不存在这个机制
# 三,作用域
let 和 const 声明形成块作用域 只要块级作用域内存在 let,它所声明的变量就会绑定在这个区域;
if (1) {
var a = 100;
let b = 10;
}
console.log(a); // 100
console.log(b); // 报错:b is not defined ===> 找不到b这个变量
1
2
3
4
5
6
2
3
4
5
6
# 四,重复声明
- let 不允许在相同作用域内重复声明(报错同时使用 var 和 let,两个 let)。
- var 允许重复声明,而 let 是不允许的
const 用来专门声明一个常量,它跟 let 一样作用于块级作用域,没有变量提升,重复声明会报错,不同的是 const 声明的常量不可改变,声明时必须初始化(赋值)